package pe.com.bn.sach.mantenimiento.controller;



import java.util.HashMap;
import java.util.Hashtable;

import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import pe.com.bn.sach.seguridad.DatosSesion;
import pe.com.bn.sach.service.MantenimientoService;
import pe.com.bn.sach.service.SelectService;
import pe.com.bn.sach.mantenimiento.form.NotariaForm;
import pe.com.bn.sach.common.Constante;
import pe.com.bn.sach.domain.Bnchf07Item;
import pe.com.bn.sach.domain.Bnchf07ItemId;
import pe.com.bn.sach.domain.Bnchf08Ubigeo;
import pe.com.bn.sach.domain.Bnchf39Notaria;
import pe.com.bn.sach.common.Util;


public class NotariaController extends MultiActionController {
	
    private String listar;
    Bnchf39Notaria bnchf39Notaria = new Bnchf39Notaria();
    private MantenimientoService servicioMantenimiento;
    private SelectService servicioSelect;
    
    private String commandName;
    private Class commandClass;
    /** Logger for this class and subclasses */    
    protected final Log logger = LogFactory.getLog(getClass());
    public NotariaController()
    {
    	
        ParameterMethodNameResolver resolver = new ParameterMethodNameResolver();
        resolver.setParamName("method");
        resolver.setDefaultMethodName("cargaListaNotaria");
        setMethodNameResolver(resolver);
    }

    // INICIO MANTENIMIENTO    
    public Bnchf39Notaria formBuscarInit(HttpServletRequest request) {
    	
    	Bnchf39Notaria bnchf39Notaria=new Bnchf39Notaria();
    	bnchf39Notaria.setF39IdNotaria(Util.copyLongc("0"));
    	bnchf39Notaria.setF39Ruc(null);
    	bnchf39Notaria.setF39RazonSocial(null);
    	bnchf39Notaria.setF39TpoDocRepre(null);
    	bnchf39Notaria.setF39NumDocRepre(null);
    	bnchf39Notaria.setF39ApePatRepre(null);
    	bnchf39Notaria.setF39ApeMatRepre(null);
    	bnchf39Notaria.setF39NombRepre(null);  	
    	bnchf39Notaria.setF39NroCta(null);
    
    	return bnchf39Notaria;
    }
    /* busca notaria ini */
    public Bnchf39Notaria formBuscar(HttpServletRequest request) {
    	
    	 	
    	Bnchf39Notaria bnchf39Notaria=new Bnchf39Notaria();
    	bnchf39Notaria.setF39IdNotaria(Util.copyLongc(request.getParameter("txtCodigoNotaria")));
    	bnchf39Notaria.setF39Ruc(""+request.getParameter("txtRuc"));
    	bnchf39Notaria.setF39RazonSocial(""+request.getParameter("txtRazonSocial"));
    	bnchf39Notaria.setF39TpoDocRepre(Util.copyLong(""+request.getParameter("selNroDocumento")));
    	bnchf39Notaria.setF39NumDocRepre(""+request.getParameter("txtNroDocumento"));
    	bnchf39Notaria.setF39ApePatRepre(""+request.getParameter("txtApePaterno"));
    	bnchf39Notaria.setF39ApeMatRepre(""+request.getParameter("txtApeMaterno"));
    	bnchf39Notaria.setF39NombRepre(""+request.getParameter("txtNombres"));
    	bnchf39Notaria.setF39NroCta(""+request.getParameter("txtCuenta"));
    	

    	
    	return bnchf39Notaria;
    }
    /* busca notaria ini */
    public ModelAndView cargaListaNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
    	
    	
		ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_BuscarNotaria");
		bnchf39Notaria=formBuscarInit(request);
		mav.addObject("listarNotaria",servicioMantenimiento.listarNotaria(bnchf39Notaria));
		Bnchf07Item bnchf07Item=new Bnchf07Item();
  		bnchf07Item.getId().getBnchf06Tabla().setF06IdTabla(Util.copyLong("4")); //doc
  		mav.addObject("ListTipoDocumento",servicioSelect.listItem(bnchf07Item));		
		return mav;
    }

    
    public ModelAndView cargaListaNotariaAjax(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
    	 	
		ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_BuscarNotariaAjax");
		//optSeleccion
		
		try {
			bnchf39Notaria=formBuscar(request);
			mav.addObject("listarNotaria",servicioMantenimiento.listarNotaria(bnchf39Notaria));	
		} catch (Exception e) {
			bnchf39Notaria=formBuscarInit(request);
			mav.addObject("listarNotaria",servicioMantenimiento.listarNotaria(bnchf39Notaria));
		}
		
		
		return mav;
    }
    
    public ModelAndView nuevo(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
    	
		ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_RegistrarNotaria");
		mav=select(mav);
		return mav;
    }
    
    public ModelAndView verificarDocumentoNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
    	boolean rptaService=false;
    	
		ModelAndView mav = new ModelAndView("notaria/not_RegistrarNotariaValida");
	try {
		Hashtable ht=new Hashtable();
		ht.put("Tabla",(String)"39");		
		ht.put("Ruc",(String)(Util.copyString(""+request.getParameter("Ruc"))));		
		rptaService=servicioMantenimiento.validacionDeTiposDocumentos(ht);
		if(rptaService){
			mav.addObject("txtRpta","true");	
		}else 
			mav.addObject("txtRpta","false");
		
		
		mav=select(mav);
		
	} catch (Exception e) {
		// TODO: handle exception
	}	
		return mav;
    }

    public ModelAndView select(ModelAndView mav)
    throws Exception   
    {	
    	Bnchf07Item bnchf07Item=new Bnchf07Item();
    	mav.addObject("ListDepartamento",servicioSelect.listUbigeoDepartamento());
    	bnchf07Item.getId().getBnchf06Tabla().setF06IdTabla(Util.copyLong("4")); // 02 sexo
  		mav.addObject("ListTipoDocumento",servicioSelect.listItem(bnchf07Item));    	  
    	bnchf07Item.getId().getBnchf06Tabla().setF06IdTabla(Util.copyLong("7")); // Inmueble    	
  		mav.addObject("ListZona",servicioSelect.listItem(bnchf07Item));
  		bnchf07Item.getId().getBnchf06Tabla().setF06IdTabla(Util.copyLong("21")); // Inmueble
  		mav.addObject("ListVia",servicioSelect.listItem(bnchf07Item));
  		bnchf07Item.getId().getBnchf06Tabla().setF06IdTabla(Util.copyLong("22")); // Inmueble
  		mav.addObject("ListExterior",servicioSelect.listItem(bnchf07Item));
  		bnchf07Item.getId().getBnchf06Tabla().setF06IdTabla(Util.copyLong("23")); // Inmueble
  		mav.addObject("ListInterior",servicioSelect.listItem(bnchf07Item));
  		bnchf07Item.getId().getBnchf06Tabla().setF06IdTabla(Util.copyLong("7")); // ubicacion
  		mav.addObject("ListUbicacion",servicioSelect.listItem(bnchf07Item));
  		
  		bnchf07Item.getId().getBnchf06Tabla().setF06IdTabla(Util.copyLong("33")); // ListEstado
  		mav.addObject("ListEstado",servicioSelect.listItem(bnchf07Item));
  		
  		// ListEstado
  		
    	return mav;
    } 
    
    public ModelAndView encontrarNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {    	 
    	ModelAndView mav = new ModelAndView();
     	if(request.getParameter("txtOpcion").equals("bajar"))  	
    	mav = new ModelAndView("mantenimiento/notaria/not_BajaNotaria"); // contular-modificar-bajar
    	if(request.getParameter("txtOpcion").equals("consultar"))
    	mav = new ModelAndView("mantenimiento/notaria/not_ConsultaNotaria"); // contular-modificar-bajar
    	if(request.getParameter("txtOpcion").equals("modificar"))
    	mav = new ModelAndView("mantenimiento/notaria/not_ModificarNotaria"); // contular-modificar-bajar
    	Bnchf39Notaria bnchf39Notaria=new Bnchf39Notaria();
    	bnchf39Notaria.setF39IdNotaria(Util.copyLong(""+""+request.getParameter("optSeleccion")));
     	Bnchf08Ubigeo bnchf08Ubigeo=new Bnchf08Ubigeo();
    	bnchf39Notaria=servicioMantenimiento.encontrarNotaria(bnchf39Notaria);
        try {bnchf08Ubigeo.setF08Cubigeo(bnchf39Notaria.getF39DptoDirecc()+bnchf39Notaria.getF39ProvDirecc()+bnchf39Notaria.getF39DistriDirecc());} catch (Exception e) {logger.error("Error "+e);	}
        bnchf08Ubigeo=servicioSelect.encontrarDistrito(bnchf08Ubigeo);
        Bnchf08Ubigeo provincia=new Bnchf08Ubigeo();       
        provincia.getId().setF08IdDpto(bnchf39Notaria.getF39DptoDirecc());
        bnchf08Ubigeo=servicioSelect.encontrarDistrito(bnchf08Ubigeo);        
  		mav.addObject("ListProvinciaUbigeo",servicioSelect.listProvincia(provincia));  		
  		Bnchf08Ubigeo distrito=new Bnchf08Ubigeo();
  		distrito.getId().setF08IdDpto(bnchf39Notaria.getF39DptoDirecc());
  		distrito.getId().setF08IdProv(bnchf39Notaria.getF39ProvDirecc());
  		mav.addObject("ListDistritoUbigeo",servicioSelect.listDistrito(distrito));  		
  		bnchf08Ubigeo.getId().setF08IdProv(bnchf39Notaria.getF39ProvDirecc());  		
  		bnchf08Ubigeo.getId().setF08IdDistri(bnchf39Notaria.getF39DistriDirecc());
  		
  		mav.addObject("Ubigeo",bnchf08Ubigeo); 		

    	mav.addObject("Notaria",bnchf39Notaria);
    	mav=select(mav); 
    	return mav;
    }
     
    Bnchf39Notaria getForm(NotariaForm notariaForm){
    	
    	Bnchf39Notaria bnchf39Notaria=new Bnchf39Notaria();
    	bnchf39Notaria.setF39IdNotaria(Util.copyLong(""+notariaForm.getTxtIdNotaria()));
    	bnchf39Notaria.setF39Ruc(notariaForm.getTxtRuc());
    	bnchf39Notaria.setF39RazonSocial(notariaForm.getTxtRazsocial());
    	bnchf39Notaria.setF39TpoDocRepre(Util.copyLong(""+notariaForm.getSelDocumentoRepre()));
    	bnchf39Notaria.setF39NumDocRepre(notariaForm.getTxtNroDocumento());
    	bnchf39Notaria.setF39ApePatRepre(notariaForm.getTxtApePaternoRepre());
    	bnchf39Notaria.setF39ApeMatRepre(notariaForm.getTxtApeMaternoRepre());
    	bnchf39Notaria.setF39NombRepre(notariaForm.getTxtNombresRepre());
    	bnchf39Notaria.setF39CtaCorreo(notariaForm.getTxtCorreo());
    	bnchf39Notaria.setF39TelfFijo(notariaForm.getTxtTelefijo());
    	bnchf39Notaria.setF39TelfCel(notariaForm.getTxtCelular());    	
    	bnchf39Notaria.setF39NroCta(notariaForm.getTxtNroCta());
    	bnchf39Notaria.setF39TpoZona(Util.copyLong(notariaForm.getSelZona()));
    	bnchf39Notaria.setF39NomZona(notariaForm.getTxtNomZona());
    	bnchf39Notaria.setF39TpoVia(Util.copyLong(notariaForm.getSelVia()));
    	bnchf39Notaria.setF39NomVia(notariaForm.getTxtNomVia());		    	
    	bnchf39Notaria.setF39TpoExt(Util.copyLong(notariaForm.getSelExt()));
    	bnchf39Notaria.setF39NomExt(notariaForm.getTxtNomExt());
    	bnchf39Notaria.setF39TpoInt(Util.copyLong(notariaForm.getSelInt()));
    	bnchf39Notaria.setF39NomInt(notariaForm.getTxtNomInt());
    	bnchf39Notaria.setF39Piso(notariaForm.getTxtPiso());
    	bnchf39Notaria.setF39Observ(notariaForm.getTxtObservacion());
     	if(notariaForm.getSelDepartamentoDato()!=null&&notariaForm.getSelDepartamentoDato().length()!=4)    	
    	bnchf39Notaria.setF39DptoDirecc(notariaForm.getSelDepartamentoDato());
    	else
    	bnchf39Notaria.setF39DptoDirecc("0");
    	if(notariaForm.getSelProvinciaDato()!=null && notariaForm.getSelProvinciaDato().length()!=4)
    	bnchf39Notaria.setF39ProvDirecc(notariaForm.getSelProvinciaDato());
    	else
    	bnchf39Notaria.setF39ProvDirecc("0");
			
    	if(notariaForm.getSelDistritoDato()!=null&& notariaForm.getSelDistritoDato().length()!=4)
    	bnchf39Notaria.setF39DistriDirecc(notariaForm.getSelDistritoDato());
    	else
    	bnchf39Notaria.setF39DistriDirecc("0");
    	
     	try {
        	if(notariaForm.getSelProvinciaDato()!=null)
            	if(notariaForm.getSelDistritoDato().length()==5)
            	bnchf39Notaria.setF39DistriDirecc("0");			
		} catch (Exception e) {
			// TODO: handle exception
		}
    	
	
    	
    	return bnchf39Notaria;
		}
    public ModelAndView guardarNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {   	
    	
 		Object command = getCommandObject(request); 		
 		NotariaForm notariaForm=new NotariaForm (); 		
		notariaForm = (NotariaForm)command;		
    	ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_BuscarNotaria");
    	bnchf39Notaria=new Bnchf39Notaria();    	
    	bnchf39Notaria=getForm(notariaForm);
    	DatosSesion datosSesion=(DatosSesion)request.getSession().getAttribute("datosSesion");
    	bnchf39Notaria.setF39IdUsuaCrea(datosSesion.getCodigoHost());
     	mav.addObject("Msj",servicioMantenimiento.guardarNotaria(bnchf39Notaria));
    	return cargaListaNotaria(request,response);
    }

    public ModelAndView modificarNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {   	
   		Object command = getCommandObject(request); 		
 		NotariaForm notariaForm=new NotariaForm (); 		
		notariaForm = (NotariaForm)command;		
    	ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_BuscarNotaria");   	
    	bnchf39Notaria=new Bnchf39Notaria();    	
    	bnchf39Notaria=getForm(notariaForm);
    	DatosSesion datosSesion=(DatosSesion)request.getSession().getAttribute("datosSesion");
    	bnchf39Notaria.setF39IdUsuaCrea(datosSesion.getCodigoHost());    	
    	mav.addObject("Msj",servicioMantenimiento.modificarNotaria(bnchf39Notaria));
		return cargaListaNotaria(request,response);
    }

    public ModelAndView bajarNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {   	
    	
 		Object command = getCommandObject(request); 		
 		NotariaForm notariaForm=new NotariaForm (); 		
		notariaForm = (NotariaForm)command;		
    	ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_BuscarNotaria");   	
    	bnchf39Notaria=new Bnchf39Notaria();  	
    	bnchf39Notaria=getForm(notariaForm);
    	mav.addObject("Msj",servicioMantenimiento.bajarNotaria(bnchf39Notaria));
    	return cargaListaNotaria(request,response);
    }
    
    
    public ModelAndView consultarReniecf(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
    
		ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_ConsultarPopupReniecFrame");
		return mav;
    }
    
    public ModelAndView consultarReniec(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
    	
		ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_ConsultarPopupReniec");
		return mav;
    } 

    // FIN MANTENIMIENTO
    
    
    public ModelAndView acNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {   	
 		Object command = getCommandObject(request); 		
 		NotariaForm notariaForm=new NotariaForm (); 		
		notariaForm = (NotariaForm)command;		
    	ModelAndView mav = new ModelAndView("mantenimiento/notaria/not_BuscarNotaria");
    	bnchf39Notaria=new Bnchf39Notaria();
    	///bnchf39Notaria.setF39ApeMatRepre();//
    	mav.addObject("Msj",servicioMantenimiento.guardarNotaria(bnchf39Notaria));
		return mav;
    }
    
    
    
    public ModelAndView seleccionarNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
    	ModelAndView mav = new ModelAndView("notaria/seleccionarNotariaFrame");
    	mav=cargarCombos(mav);
		return mav;
       
    }
    

    public ModelAndView buscarNotaria(HttpServletRequest request, HttpServletResponse response)
    throws Exception
    {
    	
    	reiniciarNotaria();
    	NotariaForm notariaForm = new NotariaForm();
    	Object command = getCommandObject(request);
		notariaForm = (NotariaForm)command;
		  if(notariaForm.getTxtCodNotaria()!=null && !notariaForm.getTxtCodNotaria().equals("")) bnchf39Notaria.setF39IdNotaria(Util.copyLong(notariaForm.getTxtCodNotaria()));
		  if(notariaForm.getSelDocumentoRepre()!=null && !notariaForm.getSelDocumentoRepre().equals("")) bnchf39Notaria.setF39TpoDocRepre(Util.copyLong(notariaForm.getSelDocumentoRepre()));
		   bnchf39Notaria.setF39ApePatRepre(Util.copyString(notariaForm.getTxtApePaternoRepre()));
		  bnchf39Notaria.setF39ApeMatRepre(Util.copyString(notariaForm.getTxtApeMaternoRepre()));
		  bnchf39Notaria.setF39NombRepre(Util.copyString(notariaForm.getTxtNombresRepre()));
		  if(notariaForm.getSelDocumentoRepre()!=null && !notariaForm.getSelDocumentoRepre().equals("")) bnchf39Notaria.setF39TpoDocRepre(Util.copyLong(notariaForm.getSelDocumentoRepre()));
		  bnchf39Notaria.setF39NumDocRepre(Util.copyString(notariaForm.getTxtNroDocumento()));
		  bnchf39Notaria.setF39ApePatRepre(Util.copyString(notariaForm.getTxtApePaternoRepre()));
		  bnchf39Notaria.setF39ApeMatRepre(Util.copyString(notariaForm.getTxtApeMaternoRepre()));
		  bnchf39Notaria.setF39NombRepre(Util.copyString(notariaForm.getTxtNombresRepre()));
		  bnchf39Notaria.setF39RazonSocial(Util.copyString(notariaForm.getTxtRazsocial()));
		  bnchf39Notaria.setF39Ruc(Util.copyString(notariaForm.getTxtRuc()));
		  bnchf39Notaria.setF39NroCta(Util.copyString(notariaForm.getCuenta()));
		  bnchf39Notaria.setF39StdoNotaria(new Long(Constante.gBN_CONST_ESTADO_DE_REGISTRO_DE_TABLA_ACTIVO));
		 
		  HashMap data = new HashMap();
		  data.put("apepat",		notariaForm.getTxtApePaternoRepre());
		  data.put("apemat",		notariaForm.getTxtApeMaternoRepre());
		  data.put("nombrerepre",	notariaForm.getTxtNombresRepre());
		  data.put("nrodoc",		notariaForm.getTxtNroDocumento());
		  data.put("tipodoc",		notariaForm.getSelDocumentoRepre());
		  data.put("codigo",		notariaForm.getTxtCodNotaria ());
		  data.put("ruc",			notariaForm.getTxtRuc());
		  data.put("razsoc",		notariaForm.getTxtRazsocial());
		  data.put("cuenta",		notariaForm.getCuenta());
		  
		  
    	ModelAndView mav = new ModelAndView("notaria/seleccionarNotaria");
    	mav=cargarCombos(mav);
    	mav.addObject("lista_notaria",servicioMantenimiento.buscarNotaria(bnchf39Notaria));
    	mav.addObject("data",data);
    	reiniciarForm(notariaForm);
    	
    	return mav;
    }
    

    
    
     
    
  
    public ModelAndView cargarCombos(ModelAndView mav) throws Exception{
    	Bnchf07ItemId itemid= new Bnchf07ItemId();
		Bnchf07Item item= new Bnchf07Item();
		itemid.getBnchf06Tabla().setF06IdTabla(new Long(19));
		item.setId(itemid);
		mav.addObject("lstTipoPersona",servicioSelect.listItem(item));
		mav.addObject("lstEstado", servicioSelect.listItemEstadoCliente());
		mav.addObject("lstEstCivil", servicioSelect.listItemEstadoCivil());
		mav.addObject("lstDocumento", servicioSelect.listItemDNI());
		mav.addObject("opciondefecto",Constante.CONST_SELECT_DEFAULT);
		
    	return mav;
    }
    
    
    public void reiniciarNotaria(){
    	bnchf39Notaria.setF39IdNotaria(null);
    	bnchf39Notaria.setF39ApeMatRepre("");
    	bnchf39Notaria.setF39ApePatRepre("");
    	bnchf39Notaria.setF39NroCta("");
    	bnchf39Notaria.setF39NombRepre("");
    	bnchf39Notaria.setF39NumDocRepre("");
    	bnchf39Notaria.setF39RazonSocial("");
    	bnchf39Notaria.setF39Ruc("");
    	
    	
    }
    
    public void reiniciarForm(NotariaForm notariaForm){
    	notariaForm.setSelDepartamento("");
    	notariaForm.setSelDistrito("");
    	notariaForm.setSelDocumentoRepre("");
    	notariaForm.setSelProvincia("");
    	notariaForm.setTxtApePaternoRepre("");
    	notariaForm.setTxtApeMaternoRepre("");
    	notariaForm.setTxtCelular("");
    	notariaForm.setTxtCodNotaria("");
    	notariaForm.setTxtCorreo("");
    	bnchf39Notaria.setF39NombRepre("");
    }

    public Object getCommandObject(HttpServletRequest request)
    throws Exception
    {
    Object command = formBackingObject(request);
    bind(request, command);
    return command;
    }
    protected Object formBackingObject(HttpServletRequest request)
    throws Exception
    {
        return commandClass.newInstance();
    }



	public Class getCommandClass() {
		return commandClass;
	}


	public void setCommandClass(Class commandClass) {
		this.commandClass = commandClass;
	}


	public String getCommandName() {
		return commandName;
	}


	public void setCommandName(String commandName) {
		this.commandName = commandName;
	}



	
	/**
	 * @return Devuelve servicioSelect.
	 */
	public SelectService getServicioSelect() {
		return servicioSelect;
	}
	/**
	 * @param servicioSelect El servicioSelect a establecer.
	 */
	public void setServicioSelect(SelectService servicioSelect) {
		this.servicioSelect = servicioSelect;
	}
	/**
	 * @return Devuelve mantenimientoService.
	 */
	public MantenimientoService getServicioMantenimiento() {
		return servicioMantenimiento;
	}
	/**
	 * @param mantenimientoService El mantenimientoService a establecer.
	 */
	public void setServicioMantenimiento(
			MantenimientoService servicioMantenimiento) {
		this.servicioMantenimiento = servicioMantenimiento;
	}
}


